﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI.WebControls;

namespace KPWeb.Data
{
    public class cJednostki
    {
//wiz.TimeSince,wiz.TimeUntil,wiz.AnkietyOcenaID,wiz.OsobaID,wiz.Rok,wiz.Stan,wiz.active
      public struct ankietaOcenyHist{
            DateTime timeSince;
            DateTime? timeUntil;
            int ankietyOcenaID;
            int osobaID;
            short rok;
            byte stan;
            string activ;
        }

        static public IEnumerable<vKP_JednostkiLista> PobierzJednostkiNaListeSortujJ(int FirmaID)
        {
            using (DBContainer db = new DBContainer())
            {
                return (from wiz in db.vKP_JednostkiLista
                        orderby wiz.JednostkaKod
                        where (wiz.FirmaID == FirmaID)
                        select wiz).ToArray();
            }
        }
        static public IEnumerable<vKP_JednostkiLista> PobierzJednostkiNaListeSortujG(int firmaID)
        {
            using (DBContainer db = new DBContainer())
            {
                return (from wiz in db.vKP_JednostkiLista
                        orderby wiz.JednostkaGlownaID
                        where (wiz.FirmaID == firmaID)
                        select wiz).ToArray();
            }
        }
        static public IEnumerable<KP_JednostkiFirmy> PobierzJednostki(int firmaID,string czyAktywne, string czyGlowne)
            //"t" rozpoczeła pracę w KPWeb, "f" nie
        {
            using (DBContainer db = new DBContainer())
            {
              if (czyGlowne=="f")
                return (from wiz in db.KP_JednostkiFirmy
                        orderby wiz.JednostkaKod
                        where (wiz.FirmaID == firmaID && wiz.active == czyAktywne && wiz.JednostkaKod != "rejestracja")
                        select wiz).ToArray();
                 else
                  return (from wiz in db.KP_JednostkiFirmy
                          orderby wiz.JednostkaKod
                          where (wiz.FirmaID == firmaID && wiz.active == czyAktywne && wiz.JednostkaKod != "rejestracja"
                          && wiz.JednostkaGlownaID == wiz.JednostkaID)
                          select wiz).ToArray();
            }
        }
        public static int UpdateActiveJednostki(int firmaID,int jednostkaID)
        {
            using (DBContainer db = new DBContainer())
            {
                try
                {

                    var wiz = db.KP_JednostkiFirmy.Where(a => a.FirmaID == firmaID && a.JednostkaID == jednostkaID && a.active == "f").ToArray();

                    foreach (KP_JednostkiFirmy itemp in wiz)
                    {
                        itemp.active = "t";

                        db.SaveChanges();
                    }

                    return 0;
                }
                catch (Exception e)
                {
                    return -2;
                }

            }
        }



        public IEnumerable<vKP_OsobyZJednostkiAnkietyOcena> PobierzOsobyZJednostkiDokumentAnkietyOcena(int grupaID, int jednostkaGlownaID)
        {
            using (DBContainer db = new DBContainer())
            {
                return (from wiz in db.vKP_OsobyZJednostkiAnkietyOcena
                        orderby wiz.NazwiskoImie
                        where (wiz.GrupaID == grupaID && wiz.JednostkaID == jednostkaGlownaID)
                        select wiz).ToArray();
            }
        }
        public  vKP_DokumentyAnkietaOcena[] GetDokumentyAnkietaOcena(int jednostkaGlownaID, short year)
        {
            using (DBContainer db = new DBContainer())
            {

                return (from wiz in db.vKP_DokumentyAnkietaOcena.Where(a => a.JednostkaGlownaID == jednostkaGlownaID && a.rok == year).OrderByDescending(a => a.WypelnianieOdData)
                        select wiz).ToArray();
            }
        }
        public vKP_DokumentyAnkietaOcena[] GetDokumentyAnkietaOcenaMoja(int jednostkaGlownaID,short grupaID,short year)
        {
            using (DBContainer db = new DBContainer())
            {

                return (from wiz in db.vKP_DokumentyAnkietaOcena.Where(a => a.JednostkaGlownaID == jednostkaGlownaID 
                    && a.rok == year && a.GrupaID==grupaID).OrderByDescending(a => a.WypelnianieOdData)
                        select wiz).ToArray();
            }
        }
        public int InsertDokumentAnkietaOcena(int osobaID, int jednostkaID, int rok, int grupaID, string ankietaOcenaName, DateTime dataOd, DateTime dataDo,
                byte typAnkietyOcena, string uwagi)
        //-1 błąd zapisu
        {
            using (DBContainer db = new DBContainer())
            {
                try
                {
                    KP_DokumentyAnkietaOcena e = new KP_DokumentyAnkietaOcena();
                    e.JednostkaGlownaID = jednostkaID;
                    e.Rok=rok;
                    e.GrupaID = grupaID;
                    e.AnkietaOcenaName = ankietaOcenaName;
                 
                    e.OsobaID = osobaID;

                    e.DataOd = dataOd;
                    e.DataDo = dataDo;
                    e.TypAnkietyOcenaID = typAnkietyOcena;
                    e.Uwagi = uwagi;
                    e.Stan = 0;
                    e.active = "t";

                    db.KP_DokumentyAnkietaOcena.AddObject(e);
                    db.SaveChanges();
                  
       
                    return 0;
                }
                catch (Exception)
                {
                    return -1;
                }


            }

        }

        public int DeleteDokumentAnkietaOcena(int ankietaOcenaID)
        {
            //-3 błąd operacji kasowania
            using (DBContainer db = new DBContainer())
            {
                try
                {
                    var wiz = db.KP_DokumentyAnkietaOcena.Where(a => a.AnkietaOcenaID == ankietaOcenaID && a.Stan == 0).Single();

                    KP_DokumentyAnkietaOcena e = new KP_DokumentyAnkietaOcena();
                    wiz.active = "f";
                    db.SaveChanges();
                    return 0;
                }
                catch (Exception)
                {
                    return -3;
                }


            }
        }

        public int UpdateDokumentAnkietOcenaStan(int ankietaOcenaID, byte stan1, byte stan2, int loginID)
        {

            using (DBContainer db = new DBContainer())
            {
                try
                {
                    var wiz = db.KP_DokumentyAnkietaOcena.Where(a => a.AnkietaOcenaID == ankietaOcenaID && a.Stan == stan1).Single();

                    KP_DokumentyAnkietaOcena e = new KP_DokumentyAnkietaOcena();
                    wiz.Stan = stan2;
                    wiz.OsobaID = loginID;
                    db.SaveChanges();
                    return 0;


                }
                catch (Exception e)
                {
                    return -4;
                }

            }
        }
        public int UpdateDokumentAnkietOcenaWypelnianieDo(int ankietaOcenaID, DateTime wypelnianieDoData, int loginID)
        {

            using (DBContainer db = new DBContainer())
            {
                try
                {
                    var wiz = db.KP_DokumentyAnkietaOcena.Where(a => a.AnkietaOcenaID == ankietaOcenaID && a.Stan == 0).Single();

                    KP_DokumentyAnkietaOcena e = new KP_DokumentyAnkietaOcena();
                    wiz.DataDo = wypelnianieDoData;
                    wiz.OsobaID = loginID;
                    db.SaveChanges();
                    return 0;
                }
                catch (Exception e)
                {
                    return -4;
                }

            }
        }
        public IEnumerable<KP_AnkietyOcena>  PobierzAnkietaOcena(int dokumentID, int osobaID) //jedna ankieta
        {
            using (DBContainer db = new DBContainer())
            {

                return (from wiz in db.KP_AnkietyOcena.Where(a => a.DokumentID == dokumentID && a.OsobaID == osobaID && a.TimeUntil == null)
                        select wiz).ToArray();

            }
        }
        public KP_AnkietyOcenaXML PobierzAnkietaOcenaXML(int dokumentID, int osobaID) //jedna ankieta
        {
            using (DBContainer db = new DBContainer())
            {
                return (from wiz in db.KP_AnkietyOcenaXML.Where(a => a.DokumentID == dokumentID && a.OsobaID == osobaID && a.TimeUntil == null)
                        select wiz).SingleOrDefault();
            }
        }
       //public IEnumerable<KP_AnkietyOcena> PobierzHistoriaAnkietaOcena(int dokumentID, int osobaID, DateTime timeSince) //jedna ankieta
      //     public IEnumerable<KP_AnkietyOcena> PobierzHistoriaAnkietaOcena(int ankietaOcenaID) //jedna ankieta
      //{
      //      using (DBContainer db = new DBContainer())
      //      {

      //          return (from wiz in db.KP_AnkietyOcena.Where(a => a.AnkietyOcenaID==ankietaOcenaID)
      //                  select wiz).ToArray();

      //      }
      //  }
        public KP_AnkietyOcenaXML PobierzHistoriaAnkietaOcenaSingleXML(int ankietaOcenaID) //jedna ankieta
        {
            using (DBContainer db = new DBContainer())
            {

                return (from wiz in db.KP_AnkietyOcenaXML.Where(a => a.AnkietyOcenaID == ankietaOcenaID)
                        select wiz).SingleOrDefault();

            }
        }

           public KP_AnkietyOcena PobierzHistoriaAnkietaOcenaSingle(int ankietaOcenaID) //jedna ankieta
           {
               using (DBContainer db = new DBContainer())
               {

                   return (from wiz in db.KP_AnkietyOcena.Where(a => a.AnkietyOcenaID == ankietaOcenaID)
                           select wiz).SingleOrDefault();

               }
           }
        //public IEnumerable<ankietaOcenyHist> GetHistoriaAnkietyOcena(int dokumentID, int osobaID)
        //{
        //    using (DBContainer db = new DBContainer())
        //    {
        //        var qDataAnkietaOcena = from wiz in db.KP_AnkietyOcena.Where(a => a.DokumentID == dokumentID && a.OsobaID == osobaID)
        //                select  new{wiz.TimeSince,wiz.TimeUntil,wiz.AnkietyOcenaID,wiz.OsobaID,wiz.Rok,wiz.Stan,wiz.active};

        //        int i = qDataAnkietaOcena.Count();
        //        return (IEnumerable<ankietaOcenyHist>)qDataAnkietaOcena;
        //    }
        //}
        static public IEnumerable<KP_AnkietyOcenaXML> GetHistoriaAnkietyOcena(int dokumentID, int osobaID)
        {
            using (DBContainer db = new DBContainer())
            {
                return( from wiz in db.KP_AnkietyOcenaXML.Where(a => a.DokumentID == dokumentID && a.OsobaID == osobaID)
                        select wiz).OrderByDescending(a=>a.TimeSince).ToArray();

             
            }
        }
    }
}